﻿//using Sgr.BackGroundTasks;
//using Sgr.DataCategories.Services;
//using System.Diagnostics;

//namespace Sgr.DataCategories.BackGroundTasks
//{
//    public class RefreshCategoryCacheBackgroundTask : IBackGroundTask
//    {
//        private readonly ILogger<RefreshCategoryCacheBackgroundTask> _logger;
//        private readonly ICategoryItemsManagement _categoryItemsManagement;

//        public RefreshCategoryCacheBackgroundTask(
//            ICategoryItemsManagement categoryItemsManagement,
//            ILogger<RefreshCategoryCacheBackgroundTask> logger)
//        {
//            _categoryItemsManagement = categoryItemsManagement ??
//                throw new ArgumentNullException(nameof(categoryItemsManagement));
//            _logger = logger ??
//                throw new ArgumentNullException(nameof(logger));
//        }

//        public async Task ExecuteAsync()
//        {
//            _logger.LogInformation("开始执行数据字典缓存刷新任务，时间: {DateTime}", DateTime.UtcNow);

//            var stopwatch = Stopwatch.StartNew();

//            try
//            {
//                // 创建可取消的令牌源，如果任务运行超过30分钟，则取消操作
//                using var cts = new CancellationTokenSource(TimeSpan.FromMinutes(30));

//                await _categoryItemsManagement.RefreshAllAsync(cts.Token);

//                stopwatch.Stop();
//                _logger.LogInformation(
//                    "数据字典缓存刷新任务成功完成，耗时: {Elapsed}ms",
//                    stopwatch.ElapsedMilliseconds);
//            }
//            catch (OperationCanceledException ex)
//            {
//                stopwatch.Stop();
//                _logger.LogWarning(
//                    ex,
//                    "数据字典缓存刷新任务被取消，可能是因为执行时间过长，已执行时间: {Elapsed}ms",
//                    stopwatch.ElapsedMilliseconds);

//                // 重新抛出取消异常，让调度框架知道任务被取消
//                throw;
//            }
//            catch (Exception ex)
//            {
//                stopwatch.Stop();
//                _logger.LogError(
//                    ex,
//                    "数据字典缓存刷新任务执行失败，耗时: {Elapsed}ms，错误: {ErrorMessage}",
//                    stopwatch.ElapsedMilliseconds,
//                    ex.Message);

//                // 重新抛出异常，让调度框架知道任务失败
//                throw;
//            }
//        }
//    }
//}